package com.foreknow.demo11;

/**
 * 主人类
 */
public class Master {
    //主人给宠物看病的方法(多态)
    public void cure(Pet pet){
        if (pet.getHealth()<50){
       pet.toHospital();
        }
    }
    //主人可以带宠物玩游戏
    public void play(Pet pet){
        if (pet instanceof Dog){//如果Dog与Pet有继承关系  返回结果true 否则就为false
            Dog dog = (Dog) pet;
            dog.catchFly();
        }else if (pet instanceof Penguin){
            Penguin penguin = (Penguin) pet;
            penguin.swimming();
        }


    }

    //主人给Penguin看病的方法
//    public void cure(Penguin penguin){
//        if (penguin.getHealth()<40){
//            penguin.setHealth(60);
//            System.out.println("医疗.....打针");
//        }
//    }

    public static void main(String[] args) {
        Master master = new Master();
        //父类的引用指向子类的对象
        Pet p = new Dog();
        p.setHealth(40);
        master.cure(p);
        master.play(p);

        p = new Penguin();
        p.setHealth(20);
        master.cure(p);
        master.play(p);


//        Master master = new Master();
//        Dog dog = new Dog();
//        dog.setHealth(40);
//        master.cure(dog);
//        Penguin penguin = new Penguin();
//        penguin.setHealth(20);
//        master.cure(penguin);

        System.out.println("类型转换--------------");

        int a=12;//小类型
        double d = a;//自动类型转换


        Dog dd = new Dog();//子类型
        Pet pp = dd;//向上(自动类型转换)


        Penguin penguin1= (Penguin) p;//向下类型转换(强制类型转换)
        System.out.println("类型转换--------------");






    }
}
